home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / info-service / www / dev / libHTML-930121 / HTMLdtd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-20  |  4.5 KB  |  133 lines

  1. /* HTMLentities.h
  2.  * $Id$
  3.  */
  4.  
  5.  
  6. /* implements ... */
  7. #include "HTMLdtd.h"
  8.  
  9. /* uses ... */
  10. #include "SGML.h"
  11.  
  12. /**********************
  13. A translation of "ISO 8879:1986//ENTITIES Added Latin 1//EN"
  14. and the postscript encoding of those symbols to C.
  15. ***********************/
  16.  
  17. static HMBinding entities[] = {
  18.   {"AElig",    "\306"},    /* capital AE diphthong (ligature) */ 
  19.   {"Aacute",    "\301"},    /* capital A, acute accent */ 
  20.   {"Acirc",    "\302"},    /* capital A, circumflex accent */ 
  21.   {"Agrave",    "\300"},    /* capital A, grave accent */ 
  22.   {"Aring",    "\305"},    /* capital A, ring */ 
  23.   {"Atilde",    "\303"},    /* capital A, tilde */ 
  24.   {"Auml",    "\304"},    /* capital A, dieresis or umlaut mark */ 
  25.   {"Ccedil",    "\307"},    /* capital C, cedilla */ 
  26.   {"ETH",    "\320"},    /* capital Eth, Icelandic */ 
  27.   {"Eacute",    "\311"},    /* capital E, acute accent */ 
  28.   {"Ecirc",    "\312"},    /* capital E, circumflex accent */ 
  29.   {"Egrave",    "\310"},    /* capital E, grave accent */ 
  30.   {"Euml",    "\313"},    /* capital E, dieresis or umlaut mark */ 
  31.   {"Iacute",    "\315"},    /* capital I, acute accent */ 
  32.   {"Icirc",    "\316"},    /* capital I, circumflex accent */ 
  33.   {"Igrave",    "\314"},    /* capital I, grave accent */ 
  34.   {"Iuml",    "\317"},    /* capital I, dieresis or umlaut mark */ 
  35.   {"Ntilde",    "\321"},    /* capital N, tilde */ 
  36.   {"Oacute",    "\323"},    /* capital O, acute accent */ 
  37.   {"Ocirc",    "\324"},    /* capital O, circumflex accent */ 
  38.   {"Ograve",    "\322"},    /* capital O, grave accent */ 
  39.   {"Oslash",    "\330"},    /* capital O, slash */ 
  40.   {"Otilde",    "\325"},    /* capital O, tilde */ 
  41.   {"Ouml",    "\326"},    /* capital O, dieresis or umlaut mark */ 
  42.   {"THORN",    "\336"},    /* capital THORN, Icelandic */ 
  43.   {"Uacute",    "\332"},    /* capital U, acute accent */ 
  44.   {"Ucirc",    "\333"},    /* capital U, circumflex accent */ 
  45.   {"Ugrave",    "\331"},    /* capital U, grave accent */ 
  46.   {"Uuml",    "\334"},    /* capital U, dieresis or umlaut mark */ 
  47.   {"Yacute",    "\335"},    /* capital Y, acute accent */ 
  48.   {"aacute",    "\341"},    /* small a, acute accent */ 
  49.   {"acirc",    "\342"},    /* small a, circumflex accent */ 
  50.   {"aelig",    "\346"},    /* small ae diphthong (ligature) */ 
  51.   {"agrave",    "\340"},    /* small a, grave accent */ 
  52.   {"amp",    "\046"},    /* ampersand */ 
  53.   {"aring",    "\345"},    /* small a, ring */ 
  54.   {"atilde",    "\343"},    /* small a, tilde */ 
  55.   {"auml",    "\344"},    /* small a, dieresis or umlaut mark */ 
  56.   {"ccedil",    "\347"},    /* small c, cedilla */ 
  57.   {"eacute",    "\351"},    /* small e, acute accent */ 
  58.   {"ecirc",    "\352"},    /* small e, circumflex accent */ 
  59.   {"egrave",    "\350"},    /* small e, grave accent */ 
  60.   {"eth",    "\360"},    /* small eth, Icelandic */ 
  61.   {"euml",    "\353"},    /* small e, dieresis or umlaut mark */ 
  62.   {"gt",    "\076"},    /* greater than */ 
  63.   {"iacute",    "\355"},    /* small i, acute accent */ 
  64.   {"icirc",    "\356"},    /* small i, circumflex accent */ 
  65.   {"igrave",    "\354"},    /* small i, grave accent */ 
  66.   {"iuml",    "\357"},    /* small i, dieresis or umlaut mark */ 
  67.   {"lt",    "\074"},    /* less than */ 
  68.   {"ntilde",    "\361"},    /* small n, tilde */ 
  69.   {"oacute",    "\363"},    /* small o, acute accent */ 
  70.   {"ocirc",    "\364"},    /* small o, circumflex accent */ 
  71.   {"ograve",    "\362"},    /* small o, grave accent */ 
  72.   {"oslash",    "\370"},    /* small o, slash */ 
  73.   {"otilde",    "\365"},    /* small o, tilde */ 
  74.   {"ouml",    "\366"},    /* small o, dieresis or umlaut mark */ 
  75.   {"szlig",    "\337"},    /* small sharp s, German (sz ligature) */ 
  76.   {"thorn",    "\376"},    /* small thorn, Icelandic */ 
  77.   {"uacute",    "\372"},    /* small u, acute accent */ 
  78.   {"ucirc",    "\373"},    /* small u, circumflex accent */ 
  79.   {"ugrave",    "\371"},    /* small u, grave accent */ 
  80.   {"uuml",    "\374"},    /* small u, dieresis or umlaut mark */ 
  81.   {"yacute",    "\375"},    /* small y, acute accent */ 
  82.   {"yuml",    "\377"},    /* small y, dieresis or umlaut mark */ 
  83. };
  84.  
  85. #define ARRAYSIZE(x) (sizeof(x)/sizeof((x)[0]))
  86.  
  87. CONST char*
  88.   html_entity_text(unused, name)
  89. HMDoc* unused;
  90. CONST char* name;
  91. {
  92.   /* binary search through sorted list of entity names */
  93.  
  94.   CONST HMBinding *ed;
  95.   int bottom = 0;
  96.   int top = ARRAYSIZE(entities);
  97.   int sign, half;
  98.  
  99.   while(half = (top + bottom)/2,
  100.     ed = entities + half,
  101.     sign = strcmp(name, ed->name)){
  102.     if(top - bottom <= 1)
  103.       return 0; /* error: undefined entity */
  104.  
  105.     if(sign < 0)
  106.       top = half;
  107.     else
  108.       bottom = half;
  109.   }
  110.  
  111.   return ed->value;
  112. }
  113.  
  114.  
  115. int
  116.   HTML_content(gi)
  117. CONST char* gi;
  118. {
  119.   if(!strcmp(gi, "TITLE") ||
  120.      !strcmp(gi, "XMP") ||
  121.      !strcmp(gi, "LISTING")){
  122.     return SGML_RCDATA;
  123.   }else if(!strcmp(gi, "P") ||
  124.        !strcmp(gi, "LI") ||
  125.        !strcmp(gi, "DT") ||
  126.        !strcmp(gi, "DD")
  127.        ){
  128.     return SGML_EMPTY;
  129.   }else{
  130.     return SGML_MIXED;
  131.   }
  132. }
  133.